#ifndef SHELLSORT_H
#define SHELLSORT_H

#include "sortalgorithm.h"

// Shell排序类：继承通用排序算法接口 SortAlgorithm
class ShellSort : public SortAlgorithm {
public:
    // 构造函数：接收初始数据并进行初始化
    ShellSort(const QVector<int> &values);

    // 单步执行排序逻辑（用于动画或逐步演示）
    void step() override;

    // 判断排序是否完成
    bool isFinished() const override;

    // 获取当前排序状态（用于可视化显示）
    const QVector<SortBar>& getData() const override;

    // 获取并清除当前步骤的比较次数
    int getAndResetCompareCount() override;

    // 获取并清除当前步骤的交换次数
    int getAndResetSwapCount() override;

    // 获取算法复杂度描述信息
    QString getComplexityInfo() const override;

    // 设置排序方向（升序或降序）
    void setOrder(SortOrder order) override;

private:
    QVector<SortBar> bars;        // 包含每个元素及其颜色的数组（用于可视化）
    int gap;                      // 当前插入间隔（Shell排序核心参数）
    int i;                        // 外层循环索引
    int j;                        // 内层循环索引（用于后退插入）
    bool sorted;                  // 是否排序完成
    int compareCount;             // 比较次数（每次 step 累加）
    int swapCount;                // 交换次数（每次 step 累加）
    SortOrder sortOrder = SortOrder::Ascending; // 当前排序方向（默认为升序）
};

#endif // SHELLSORT_H
